package com.ming.learn.from.carl.linkedlist;

import com.ming.commons.utils.ListNode;

/*
第203题：移除链表元素
 */
public class Of20201221LeetCode203 {
    /*

     */
    /*
    「直接使用原来的链表来进行删除操作。」
     */
    static ListNode removeElements1(ListNode head,int val){
        ListNode temp=head;
        while (temp.val==val){
            temp=temp.next;
        }
        while (temp.next!=null){
            if (temp.next.val==val){
                temp.next=temp.next.next;
            }else {
                temp=temp.next;
            }
        }
        return head;
    }
    /*
    「设置一个虚拟头结点在进行删除操作。」
     */
    static ListNode removeElements2(ListNode head,int val){
        ListNode dummyHead = new ListNode(0,head);//设置一个虚拟头结点 将虚拟头结点指向head，这样方面后面做删除操作
        head=dummyHead;
        while (head.next!=null){
            if (head.next.val==val){
                head.next=head.next.next;
            }else{
                head=head.next;
            }
        }
        return dummyHead.next;
    }
    public static void main(String[] args) {
        ListNode listNode = removeElements2(new ListNode(1, new ListNode(2, new ListNode(6, new ListNode(
                3, new ListNode(4, new ListNode(5, new ListNode(6))))))), 6);
        while (listNode!=null){
            System.out.println(listNode.val);
            listNode=listNode.next;
        }
    }
}
